﻿
namespace SistemaLogistica.DataAccess
{
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Common;
    using SistemaLogistica.Business.Entities;

    public class DetalleOrdenCompraData : BaseDataAccess
    {
        private DetalleOrdenCompraData() { }

        private readonly static DetalleOrdenCompraData instancia = new DetalleOrdenCompraData();

        public static DetalleOrdenCompraData Instancia
        {
            get { return instancia; }
        }

        public List<DetalleOrdenCompra> ListarPorOrdenCompra(int idOrdenCompra)
        {
            List<DetalleOrdenCompra> detalle = new List<DetalleOrdenCompra>();
            DbCommand command = db.GetStoredProcCommand("GetDetalleOrdenCompraByIdOrdenCompra");
            db.AddInParameter(command, "idOrdenCompra", DbType.Int32, idOrdenCompra);

            using (IDataReader dr = db.ExecuteReader(command))
            {
                while (dr.Read())
                {
                    detalle.Add(new DetalleOrdenCompra
                    {
                        IdOrdenCompra = dr.GetInt32(dr.GetOrdinal("IdOrdenCompra")),
                        Cantidad = dr.GetDecimal(dr.GetOrdinal("Cantidad")),
                        Monto = dr.GetDecimal(dr.GetOrdinal("Monto")),
                        Bien = BienData.Instancia.ObtenerPorID(dr.GetInt32(dr.GetOrdinal("IdBien")))
                    });
                }
            }
            return detalle;
        }

        public List<DetalleOrdenCompra> ListarPorOrdenCompra(int idOrdenCompra, int tipo)
        {
            List<DetalleOrdenCompra> detalle = new List<DetalleOrdenCompra>();
            DbCommand command = db.GetStoredProcCommand("GetDetalleOrdenCompraByIdOrdenCompra");
            db.AddInParameter(command, "idOrdenCompra", DbType.Int32, idOrdenCompra);

            using (IDataReader dr = db.ExecuteReader(command))
            {
                while (dr.Read())
                {
                    DetalleOrdenCompra item = new DetalleOrdenCompra
                    {
                        IdOrdenCompra = dr.GetInt32(dr.GetOrdinal("IdOrdenCompra")),
                        Cantidad = dr.GetDecimal(dr.GetOrdinal("Cantidad")),
                        Monto = dr.GetDecimal(dr.GetOrdinal("Monto"))
                    };
                    switch (tipo)
                    {
                        case 0: // Bien
                            item.Bien = BienData.Instancia.ObtenerPorID(dr.GetInt32(dr.GetOrdinal("IdBien")));
                            break;
                        case 1: // Vehiculo
                            item.Bien = VehiculoData.Instancia.ObtenerPorID(dr.GetInt32(dr.GetOrdinal("IdBien")));
                            break;
                        case 3: // Telefono
                            item.Bien = TelefonoData.Instancia.ObtenerPorID(dr.GetInt32(dr.GetOrdinal("IdBien")));
                            break;
                        default:
                            break;
                    }
                    detalle.Add(item);
                }
            }
            return detalle;
        }
    }
}
